<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
     //封装集合类
    function Set(){
        //属性
        this.item = {};

        //方法
        //add方法
        Set.prototype.add = function (value) {
               //判断当前元素是否已经存在

              if(this.has(value)){
                  return false
              }

              this.item[value]=value
              return true
        }

        //has方法
        Set.prototype.has = function (value) {
            return this.item.hasOwnProperty(value)
        }

        //remove方法
        Set.prototype.remove = function (value) {
             if(!this.has(value)){
                  return false
             }

             delete this.item[value]
             return true
        }

        //clear方法
        Set.prototype.clear = function () {
            this.item={}
        }

        //size方法
        Set.prototype.size = function () {
             return Object.keys(this.item).length
        }


        //value方法
        Set.prototype.valueAll = function () {
            return Object.keys(this.item)
        }

        //集合间的操作
        //并集操作
        Set.prototype.union = function (otherSet) {
           //this 集合对象A
            //otherSet :集合对象b
            //创建新集合
            var unionSet = new Set();

            //获取A集所有
            var values = this.values();
            for(var i=0; i<values.length;i++){
                   unionSet.add(values[i]);
            }

            values = otherSet.values();
            for(var i=0; i<values.length;i++){
                unionSet.add(values[i])
            }
            return unionSet
        }
        //交集操作
        Set.prototype.insersectionSet = function(otherSet){

              var unionSet = new Set();

              var values = this.values();

              for(var i=0;i<values.length;i++){

                   if(otherSet.has(values[i])){
                       unionSet.add(values[i])
                   }
              }

              return unionSet

        }
        Set.prototype.insersectionSet = function(otherSet){

            var unionSet = new Set();

            var values = this.values();

            for(var i=0;i<values.length;i++){

                if(otherSet.has(values[i])){
                    unionSet.add(values[i])
                }
            }

            return unionSet

        }
        //子集操作
        Set.prototype.sub = function(otherSet){

            var unionSet = new Set();

            var values = this.values();

            for(var i=0;i<values.length;i++){

                if(!otherSet.has(values[i])){
                   return false
                }
            }

            return true

        }
    }
</script>
</body>
</html>